package com.example.aling.happyenglish;

import android.content.ContentValues;
import android.content.Intent;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;


// 收藏夹页面
public class CollectionActivity extends AppCompatActivity {
    MyHelper myHelper;        // 连接数据库和数据操作
    List<DataType> result;    // 存储单词列表数据
    Spinner spinner;          // 下拉列表，用于筛选条件
    String spinnerValue;     // 下拉列表的值
    TextView showEmpty;      // 显示“暂无数据”
    EditText search;         // 搜索框的值
    ImageView cancel;        // 搜索框清空按钮

    RecyclerView recyclerView;    // 动态列表
    HomeAdapter adapter;     // 自定义适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_collection);

        init();
    }

    private void init(){
        // 绑定控件
        spinner = findViewById(R.id.familiar_spinner);
        showEmpty = findViewById(R.id.showEmpty);
        search = findViewById(R.id.et_collectionSearch);
        recyclerView = findViewById(R.id.recycler_view);
        cancel = findViewById(R.id.cancel);

        // 设置RecyclerView的布局管理器为线性布局
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        // 连接数据库
        myHelper = new MyHelper(this);

        // 设置下拉列表的监听，第一次执行默认为“全部”，获取全部
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // 获取下拉列表的值
                spinnerValue = parent.getItemAtPosition(position).toString();
                // 清空搜索框的值
                search.setText("");
                search.clearFocus();
                // 重置单词列表
                setRecycleView();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {   }
        });

        // 设置搜索框的清空按钮是否显示
        search.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    cancel.setVisibility(View.VISIBLE);
                else
                    cancel.setVisibility(View.INVISIBLE);
            }
        });
    }

    // 设置单词列表
    private void setRecycleView(){
        // 根据spinner筛选条件，查询数据
        switch (spinnerValue){
            case "全部":
                result = myHelper.queryWords(myHelper,null,null);
                break;
            case "完全陌生*":
                result = myHelper.queryWords(myHelper,"familiar=?","*");
                break;
            case "似曾相识**":
                result = myHelper.queryWords(myHelper,"familiar=?","**");
                break;
            case "熟悉***":
                result = myHelper.queryWords(myHelper,"familiar=?","***");
                break;
        }
        // 显示listView
        showRecycleView();
        // 创建自定义适配器，并设置listView
        adapter = new HomeAdapter();
        recyclerView.setAdapter(adapter);
    }

    // 显示单词列表 或 “暂无数据”
    private void showRecycleView(){
        // 没有数据，则显示“暂无数据”，否则显示单词列表
        if (result == null) {
            recyclerView.setVisibility(View.GONE);
            showEmpty.setVisibility(View.VISIBLE);
            return ;
        }
        recyclerView.setVisibility(View.VISIBLE);
        showEmpty.setVisibility(View.GONE);
    }

    // 清空搜索框
    public void onClickClearSearch2(View view) {
        search.setText("");
    }

    // 自定义适配器，用于recycleView
    class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            //将recycler_item文件找出来，转换成View对象，并生成ViewHolder适配器
            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(CollectionActivity.this)
                    .inflate(R.layout.recycler_item,parent,false));
            return holder;
        }

        @Override
        public int getItemCount() {
            // 注意判断是否为null
            if (result == null) return 0;
            return result.size();
        }

        // 将数据绑定在ViewHolder控件上
        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            // 设置单词
            holder.word.setText(result.get(position).word);

            // 修改按钮样式
            changeButtonStyle(holder,result.get(position).familiar);

            // 按钮绑定Item的下标（用于监听按钮点击时，获取索引值）
            holder.f1.setTag(position);
            holder.f2.setTag(position);
            holder.f3.setTag(position);

            // 设置点击按钮的监听
            addClickListener(holder.f1,holder);
            addClickListener(holder.f2,holder);
            addClickListener(holder.f3,holder);
        }

        // 添加点击“熟悉程度”按钮的监听
        private void addClickListener(Button button, final MyViewHolder holder){
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 获取当前listView的item
                    int index = (Integer) v.getTag();
                    DataType type = result.get(index);
                    // 根据点击的按钮，更新数据，并修改按钮样式
                    String choose = "";
                    switch (v.getId()){
                        case R.id.f1:
                            if (!type.familiar.equals("*")) choose = "*";
                            break;
                        case R.id.f2:
                            if (!type.familiar.equals("**")) choose = "**";
                            break;
                        case R.id.f3:
                            if (!type.familiar.equals("***")) choose = "***";
                            break;
                    }
                    update(type.word,choose);
                    changeButtonStyle(holder,choose);

                    // 若当前正在搜索单词，则直接显示recycleView
                    if (search.getText().toString().length() > 0)
                        showRecycleView();
                     // 当前正在筛选熟悉程度，则重新获取
                    else if (!spinnerValue.equals("全部"))
                        setRecycleView();
                }
            });
        }

        private void changeButtonStyle(MyViewHolder holder,String familiar){
            Button f1 = holder.f1;
            Button f2 = holder.f2;
            Button f3 = holder.f3;
            // 修改按钮样式（未选中）
            f1.setBackgroundResource(R.drawable.familiar_button_grey);
            f2.setBackgroundResource(R.drawable.familiar_button_grey);
            f3.setBackgroundResource(R.drawable.familiar_button_grey);
            // 修改被选中按钮的样式
            switch (familiar){
                case "*":
                    f1.setBackgroundResource(R.drawable.familiar_button);
                    break;
                case "**":
                    f2.setBackgroundResource(R.drawable.familiar_button);
                    break;
                case "***":
                    f3.setBackgroundResource(R.drawable.familiar_button);
            }
        }

        class MyViewHolder extends RecyclerView.ViewHolder{
            TextView word;
            Button f1,f2,f3;
            ImageView delete;
            public MyViewHolder(View view) {
                super(view);    // 调用父类构造器
                // 找到对应控件
                word = view.findViewById(R.id.word);
                f1 = view.findViewById(R.id.f1);
                f2 = view.findViewById(R.id.f2);
                f3 = view.findViewById(R.id.f3);
                delete = view.findViewById(R.id.delete);
            }
        }
    }

    // 更新数据（更新熟悉程度）
    private void update(String word,String familiar){
        // 设置参数
        ContentValues values = new ContentValues();
        values.put("word",word);
        values.put("familiar",familiar);
//        // 调用myHelper更新数据
        myHelper.updateWord(values,myHelper);
        Toast.makeText(CollectionActivity.this,"修改成功",Toast.LENGTH_SHORT).show();
    }

    // 点击返回按钮
    public void onClickGoBack(View view) {
        Intent intent = new Intent();
        // 返回“查询单词”界面
        setResult(101,intent);
        finish();
    }

    // 点击删除单词
    public void onClickDelete(View view) {
        // 获取按钮的父亲控件
        View parent = (View) view.getParent();
        // 获取对应的单词
        TextView tv = parent.findViewById(R.id.word);
        String word = tv.getText().toString();
        // 调用myHelper删除单词
        myHelper.deleteWord(myHelper,word);
        Toast.makeText(CollectionActivity.this,"删除成功",Toast.LENGTH_SHORT).show();

        // 当前正在搜索单词并删除，则跳转显示全部
        if (search.getText().toString().length() > 0){
            spinner.setSelection(0,true);
            // 清空搜索框的内容和焦点
            search.setText("");
            search.clearFocus();
        }
        setRecycleView();
    }

    // 点击单词，回到首页进行搜索
    public void onClickGoBackSearch(View view) {
        Intent intent = new Intent();
        // 获取点击的单词
        String word = ((TextView) view).getText().toString();
        // 设置intent的参数
        intent.putExtra("word",word);
        // 返回“查询单词”界面
        setResult(101,intent);
        finish();
    }

    // 点击单词查询图标
    public void onClickCollectionSearch(View view) {
        // 清除搜索框的焦点
        search.clearFocus();
        String word = search.getText().toString();
        if (word.length() > 0){
            // 查询单词
            result = myHelper.queryWords(myHelper,"word=?",word);
            // 生成查询列表
            adapter = new HomeAdapter();
            recyclerView.setAdapter(adapter);
            // 显示recycleView
            showRecycleView();
        }
        else spinner.setSelection(0,true);
    }
}

